#region license
# This file is part of Grawlix.
# 
# Grawlix is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
# 
# Grawlix is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public
# License along with Grawlix.  If not, see
# <http://www.gnu.org/licenses/>.
#endregion

"""A resolver service for game URIs into typed objects."""

namespace Grawlix.Services.Resources
import System

interface ITypedResolver[of T]:
"""
A service that resolves URIs into typed objects.
Remarks: Note that this considered an advanced class only intended to be
	used by those who wish to develop their own resources.
"""
	
	def Load(uri as Uri, allowLocal as bool) as T
	"""
	Load a typed object by its URI.
	Param uri: The URI which identifies the typed object.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The typed object.
	Raises IOException: A generic I/O error occurred.
	Raises FileNotFoundException:
		The URI could not be resolved or the object is the wrong type.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
	def TryLoad(uri as Uri, allowLocal as bool) as T
	"""
	Load a typed object by its URI.
	Param uri: The URI which identifies the typed object.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The typed object found, or null if not found or invalid.
	Raises IOException: A generic I/O error occurred.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
